{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Copyright 2016-present, Facebook, Inc.\n",
    "# All rights reserved.\n",
    "\n",
    "# This source code is licensed under the license found in the\n",
    "# LICENSE-examples file in the root directory of this source tree."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ML Assisted Sampling:  Finding the prevalence of an infrequent class\n",
    "\n",
    "When sampling, sometimes we have extra information about the 'class' we would like to measure. In these cases we can use this information to take a more accurate sample.\n",
    "\n",
    "For example, when fighting spam, one question that is useful to answer is what the overall prevalence of spam is within the ecosystem. If we are lucky, the overall percent of spam is small. This poses some interesting challenges:\n",
    "* The number of spam samples may be small, if we are reviewing these items manually then we spend most of our time reviewing good items (wasted effort).\n",
    "* We may rely on the spam samples to learn from and make decisions about how to best prioritize\n",
    "* The variance associated with the sampling method is large relative to the estimated %. Reducing the error bars associated with the sample is important!\n",
    "\n",
    "We will find that ML Sampling allows us to reduce the error of the sample while increasing the number of positive examples.\n",
    "\n",
    "In this example, we are going to use the Covertype dataset as it is publicly accessible and suitable enough for our use case. We are going to code one of the classes in the dataset as 'spam'.\n",
    "1. We train a model to predict 'spam'\n",
    "1. We will use the classifier to take a ML Sample on the test data\n",
    "1. We will show how Model Assisted Sampling produces a good estimation of the overall prevalence of spam and that it prioritizes sampling of items that are more likely to be 'spam' \n",
    "1. Finally, we will compare ML Sampling to with regular random sampling to show the error associated with ML Sampling is less"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import ml_sampler\n",
    "import tutorial_helpers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# https://archive.ics.uci.edu/ml/datasets/Covertype\n",
    "# !wget https://archive.ics.uci.edu/ml/machine-learning-databases/covtype/covtype.data.gz\n",
    "# !gunzip covtype.data.gz\n",
    "data = pd.read_csv('covtype.data', names=range(54)+['class'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2    283301\n",
       "1    211840\n",
       "3     35754\n",
       "7     20510\n",
       "6     17367\n",
       "5      9493\n",
       "4      2747\n",
       "Name: class, dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['class'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# lets use class == 5 as the 'spam' - totally made up but serves as a decent example\n",
    "X, y = data[data.columns - ['class']], data['class'] == 5\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.80, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# for training purposes we want 50% 'spam' and 50% 'ham'\n",
    "num_train = len(y_train)\n",
    "num_pos = y_train.sum()\n",
    "samp_prob = num_pos * 1.0 / num_train\n",
    "\n",
    "train_sel = [True if y else np.random.rand() < samp_prob for y in y_train]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import linear_model\n",
    "clf = linear_model.LogisticRegression(C=1)\n",
    "clf.fit(X_train[train_sel], y_train[train_sel])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# number of times the content was viewed \n",
    "views = np.random.exponential(scale=100, size=len(y_test))\n",
    "\n",
    "# is spam?\n",
    "is_spam = y_test.values \n",
    "\n",
    "# spam classifier scores\n",
    "scores = clf.predict_proba(X_test)[:,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nlX//3ZzhOUePhvHHH78SHBzCsGEj05ZP8fX1pUOHu7MtV+PGTbFarWzdujnTczyVq/Y+i8Vx7zNf\noAlXW5Pk0/EaVquVE+cuOaRXrVDw44lSU1OJiorKdOyJ3ahRYzh58gTDhr1Dy5bXu6l0Iiv2liKz\nsVz2D+WSJa+2RIaGbkfr/VSoEEznzvc6PKdChWBOnz5FZGRkWlpExDEWLPgJb29v3n57FL6+vly6\nlOTql5Lm1KmTfP/9LLZs2URkZCTlypWjXr36dO7cjbvuuidducJ5/PGetGnTlo8++iTDNdauXcXw\n4UN46KFevPbaEIc8unW7m8TEJJYtW82iRX/w+++/EB5+FB8fH5RqyJgxH1K6dGmGDRvMunVr+Pnn\nP6lUqbLDdb744jPmzPmW/v1foE+fZzIcCws7wpw537J9+1YuXrxI1arV6dHjIR566BEX1ZQhKSmJ\nTz/9GH//kqbdnnapqaksW7aErVs3ceDAfs6dO0eJEj7UrFmLnj0fc2hdsDt6NIynnnqEm25qz5gx\n4/nuu1msWLGMM2dOU7p0Ge64405ef/3NDM85ffo0s2d/zaZNG4iJiSYkpCKdOnXlqaf6OaxplpBw\nhb/+WszWrZs4fPgw58+fo2TJAOrUqceTT/blhhtudL6S3ODnn+dx5coV7r23O8HBIRmO2T9bIyPP\nOZXH8uXLsFgs9O79hMMx+xeVqKjzGdJ/+GE2APff/2CGz4L0z0n/936tqlWr4e3tjdYHnCp7YZSf\ne58lAjtsP8JE9MUE4hOSHdKrBhfsGkUHDuxn8OABpKamsHDh33h7Z95qVa5cEPPm/erG0uXc3vAo\n1u86xbkY83FbhU1IuZK0b16FJrXLZ39yFo4csQdFdR2OHT16BIvFQvPmLdPSli5dgsVioUuXbqb/\n1wkJjktG/Prrz6SmpnL77R2oX7+BU+XNzooVyxg79j2SkpKoV68+jRs35fLly+zatYPQ0B3ceefd\naeMlDh06CECDBsrhOgcPaiwWC/XrO242HBkZyYULF2jYsDHjx49h2bIlNGvWkptuupmjR8PYuTM0\n7eZRs2ZtLJa1REQccwiKYmNj+eWXnyhfvrzD4PQlSxYyYcIHWCwWmjZtTpkyZdi5M5SpUydx8uRJ\nXn3VdbsoLVr0B+fOneX++x8iKCgo0/PCw8P44IN3KV26DA0bNqJhw0ZER0cTGrqdUaOGER193jRg\n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\nOl1zAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3338956a10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# a decent classifier\n",
    "tutorial_helpers.plot_roc(is_spam, scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.687613381041591"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# % of spam in the dataset, this is an important number to remember\n",
    "pcnt_spam = views[is_spam].sum() * 100.0 / views.sum()\n",
    "pcnt_spam"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# create a few bins to bucket scores by. the ml_sampler will attempt to sample roughly evenly \n",
    "# from each bin.\n",
    "bins = np.linspace(0,1,8)\n",
    "\n",
    "# index - index entries corresponding to the items that were sampled\n",
    "# weights - associated weights with the records returned\n",
    "sample_index, p_sample = ml_sampler.biased_sample( \n",
    "    biases=ml_sampler.interpolated_pdf_reciprocal(scores, bins=bins),  \n",
    "    weights=views,\n",
    "    num_samples=1000\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.5000000000000004"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# we sampled more things that were 'spam' as judged by our classifier\n",
    "is_spam[sample_index].mean() * 100.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.124637586522137"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# actually, we get several times more positive examples than normal random sampling.\n",
    "is_spam[sample_index].mean() / is_spam.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.4662443793306497"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# our estimate of the % of spam \n",
    "\n",
    "est_spam = ml_sampler.estimator(\n",
    "    views[sample_index],\n",
    "    p_sample,\n",
    "    is_spam[sample_index]\n",
    ")\n",
    "\n",
    "est_spam / views.sum() * 100.0 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.687613381041591"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# true % of spam\n",
    "pcnt_spam"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n143RGAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3338190410>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# distribution of scores in the dataset\n",
    "_ = plt.hist(scores, bins=bins)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f3330d5ea50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Roughly equal selection across bins! This means we oversample from higher score regions.\n",
    "# Note, we can change the shape of this distribution by specifying weight in the ml_sample \n",
    "# code.\n",
    "\n",
    "# Note: If we want to calibrate our models to compute P(spam) we can also use this\n",
    "# data as it draws a very smooth ROC curve.\n",
    "_ = plt.hist(scores[sample_index], bins=bins)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Simulate model assisted sampling \n",
    "This gives us error estimates associated with the sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Do some simulation to give us estimates for confidence intervals for Model Assisted Sampling\n",
    "#   Take the sample 10k times, then look at the 2.5th and 97.5th percentile\n",
    "#   this gives us a good approximation of the 95% confidence interval\n",
    "ml_results = []\n",
    "\n",
    "for _ in range(10000):\n",
    "    sample_index, p_sample = ml_sampler.biased_sample(\n",
    "        biases=ml_sampler.interpolated_pdf_reciprocal(scores, bins=bins),  \n",
    "        weights=views, \n",
    "        num_samples=1000\n",
    "    )\n",
    "    \n",
    "    est_spam = ml_sampler.estimator(\n",
    "        views[sample_index],\n",
    "        p_sample,\n",
    "        is_spam[sample_index]\n",
    "    )\n",
    "    \n",
    "    pcnt_positive_est = est_spam / views.sum() * 100.0\n",
    "    \n",
    "    ml_results.append(pcnt_positive_est)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Do some simulation to give us estimates for confidence intervals for random sampling \n",
    "#(weighted by importance)\n",
    "#   Take the sample 10k times, then look at the 2.5th and 97.5th percentile\n",
    "#   this gives us a good approximation of the 95% confidence interval\n",
    "\n",
    "rand_results = []\n",
    "\n",
    "for _ in range(10000):\n",
    "\n",
    "    sampled_ids = np.random.choice(len(views), 1000,\n",
    "        p=views / views.sum(), replace=True)\n",
    "    \n",
    "    wrs_results = is_spam[sampled_ids]\n",
    "    \n",
    "    pcnt_positive_est = wrs_results.mean() * 100.0\n",
    "    rand_results.append(pcnt_positive_est)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Value: 1.6790\n",
      "95% Confidence Interval: (1.1903, 2.2478)\n",
      "\tCI Width: 1.05752\n"
     ]
    }
   ],
   "source": [
    "# ML sampling - the 95% Confidence Interval and estimated value of spam in the ecosystem.\n",
    "ml_ci = np.percentile(ml_results, [2.5, 50, 97.5])\n",
    "\n",
    "tutorial_helpers.print_confidence_interval(ml_ci)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Value: 1.7000\n",
      "95% Confidence Interval: (0.9000, 2.5000)\n",
      "\tCI Width: 1.60000\n"
     ]
    }
   ],
   "source": [
    "# Random weighted sampling - the 95% Confidence Interval and estimated value of spam in the ecosystem.\n",
    "rand_ci = np.percentile(rand_results, [2.5, 50, 97.5])\n",
    "\n",
    "tutorial_helpers.print_confidence_interval(rand_ci)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# lets look at what we should expect from a typical confidence interval \n",
    "#   normal approximation, assumes PPS sampling\n",
    "def binomial_conf_width(p, n): \n",
    "    p = p / 100.0\n",
    "    return np.array([\n",
    "            p - 1.96 * np.sqrt(p * (1-p)/n), \n",
    "            p, \n",
    "            p + 1.96 * np.sqrt(p * (1-p)/n)]) * 100.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Value: 1.6876\n",
      "95% Confidence Interval: (0.8893, 2.4860)\n",
      "\tCI Width: 1.59671\n"
     ]
    }
   ],
   "source": [
    "binomial_ci = binomial_conf_width(pcnt_spam, 1000)\n",
    "\n",
    "tutorial_helpers.print_confidence_interval(binomial_ci)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.33905180805906165"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# For this example the confidence interval for the ML sampler is less than when \n",
    "#  using regular random sampling. \n",
    "# From above we also know that we get 2x more samples with ml_sampler (for this dataset)\n",
    "\n",
    "# Note: np.ptp gives us the range of the confidence interval.\n",
    "np.ptp(ml_ci) / np.ptp(rand_ci) - 1"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
